package fa7.socialcode.dao.hibernate;

import java.util.List;
import java.util.StringTokenizer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;

import fa7.socialcode.dao.ComunidadeDao;
import fa7.socialcode.model.Comunidade;

@Repository(value = "comunidadeDao")
public class ComunidadeDaoHibernate implements ComunidadeDao {

  HibernateTemplate hibernateTemplate;
  // Somente para log
  Log logger = LogFactory.getLog(ComunidadeDaoHibernate.class);

  @Autowired
  public ComunidadeDaoHibernate(SessionFactory sessionFactory) {
    this.hibernateTemplate = new HibernateTemplate(sessionFactory);
  }

  @Override
  public Comunidade findComunidade(Long id) {
    Comunidade comunidade = (Comunidade) hibernateTemplate.get(
        Comunidade.class, id);
    if (comunidade == null) {
      throw new ObjectRetrievalFailureException(Comunidade.class, id);
    }
    return comunidade;
  }

  @Override
  public List findComunidades() {
    // TODO Auto-generated method stub
    return hibernateTemplate.find("from Comunidade");
  }
  
  @Override
  public List findComunidadesByUsuarioId(Long usuarioId) {

    return hibernateTemplate.find("from Comunidade c where c.usuario.id = ?", usuarioId);
  }
  
  @Override
  public void removeComunidade(Long id) {
    hibernateTemplate.delete(findComunidade(id));

  }

  @Override
  public void removeComunidade(Comunidade comunidade) {
    hibernateTemplate.delete(findComunidade(comunidade.getId()));

  }

  @Override
  public void saveComunidade(Comunidade comunidade) {
    hibernateTemplate.merge(comunidade);

    if (logger.isDebugEnabled()) {
      logger.debug("comunidadeId set to: " + comunidade.getId());
    }

  }

  @Override
  public List pesquisarComunidade(String busca) {

    String where = "";

    StringTokenizer buscaArray = new StringTokenizer(busca, " ");

    while (buscaArray.hasMoreTokens()) {

      where += "nome like '%" + buscaArray.nextToken() + "%'";

      if (buscaArray.hasMoreTokens()) {
        where += " AND ";
      }

    }

    return hibernateTemplate.find("from Comunidade WHERE " + where);

  }

}
